library(tidyverse)
df_gapminder_csv <- read.csv('https://raw.githubusercontent.com/javendaXgh/datos/refs/heads/master/gapminder.csv')%>%
select(-X)%>%
as_tibble()
df_gapminder <- gapminder::gapminder
df_gastosaludmundial <- read.csv('https://raw.githubusercontent.com/UCVeconomia2024-2/scripts/refs/heads/main/data_in/clase_12/IHME/IHME_HEALTH_SPENDING_1995_2021/IHME_HEALTH_SPENDING_1995_2021_Y2024M07D23.CSV')Clase 12- Agrupamientos, Reframes
Objetivo:
Usar funciones de dplyr para poder agrupar datos y obtener valores al # aplicar una función para cada grupo
Cargar Datos y Paquetes
Info sobre el conjunto de datos df_gastosaludmundial disponible en
Procesamientos:
Cada enunciado es un problema a resolver
0- Funcionamiento group_by
df_gapminder_csv%>%
group_by(country)# A tibble: 1,704 × 6
# Groups: country [142]
country continent year lifeExp pop gdpPercap
<chr> <chr> <int> <dbl> <int> <dbl>
1 Afghanistan Asia 1952 28.8 8425333 779.
2 Afghanistan Asia 1957 30.3 9240934 821.
3 Afghanistan Asia 1962 32.0 10267083 853.
4 Afghanistan Asia 1967 34.0 11537966 836.
5 Afghanistan Asia 1972 36.1 13079460 740.
6 Afghanistan Asia 1977 38.4 14880372 786.
7 Afghanistan Asia 1982 39.9 12881816 978.
8 Afghanistan Asia 1987 40.8 13867957 852.
9 Afghanistan Asia 1992 41.7 16317921 649.
10 Afghanistan Asia 1997 41.8 22227415 635.
# ℹ 1,694 more rows
1- Obtener cantidad observaciones por país
df_gapminder_csv%>%
group_by(country)%>%
reframe(cdad_obs=n())# A tibble: 142 × 2
country cdad_obs
<chr> <int>
1 Afghanistan 12
2 Albania 12
3 Algeria 12
4 Angola 12
5 Argentina 12
6 Australia 12
7 Austria 12
8 Bahrain 12
9 Bangladesh 12
10 Belgium 12
# ℹ 132 more rows
2- Obtener cantidad observaciones por continente
df_gapminder_csv%>%
group_by(continent)%>%
reframe(cdad_obs=n())# A tibble: 5 × 2
continent cdad_obs
<chr> <int>
1 Africa 624
2 Americas 300
3 Asia 396
4 Europe 360
5 Oceania 24
# equivalente, aunque no es la misma estructura de datos
df_gapminder_csv%>%
group_by(continent)%>%
count()# A tibble: 5 × 2
# Groups: continent [5]
continent n
<chr> <int>
1 Africa 624
2 Americas 300
3 Asia 396
4 Europe 360
5 Oceania 24
3- Obtener gdpPercap promedio por período y continente
df_gapminder_csv%>%
group_by(continent, year)%>%
reframe(gdpPercap_promedio= mean(gdpPercap))## A tibble: 60 × 3
continent year gdpPercap_promedio
<chr> <int> <dbl>
1 Africa 1952 1253.
2 Africa 1957 1385.
3 Africa 1962 1598.
4 Africa 1967 2050.
5 Africa 1972 2340.
6 Africa 1977 2586.
7 Africa 1982 2482.
8 Africa 1987 2283.
9 Africa 1992 2282.
10 Africa 1997 2379.
# ℹ 50 more rows
4- Obtener gdpPercap total por período
df_gapminder_csv%>%
group_by(year)%>%
reframe(gdpPercap_promedio= mean(gdpPercap))# A tibble: 12 × 2
year gdpPercap_promedio
<int> <dbl>
1 1952 3725.
2 1957 4299.
3 1962 4726.
4 1967 5484.
5 1972 6770.
6 1977 7313.
7 1982 7519.
8 1987 7901.
9 1992 8159.
10 1997 9090.
11 2002 9918.
12 2007 11680.
5- Obtener población promedio por país para todos los períodos
df_gapminder_csv%>%
group_by(country)%>%
reframe(poblacion_promedio= mean(pop))#%>%# A tibble: 142 × 2
country poblacion_promedio
<chr> <dbl>
1 Afghanistan 15823715.
2 Albania 2580249.
3 Algeria 19875406.
4 Angola 7309390.
5 Argentina 28602240.
6 Australia 14649312.
7 Austria 7583298.
8 Bahrain 373913.
9 Bangladesh 90755395.
10 Belgium 9725119.
# ℹ 132 more rows
# filter(country=='Venezuela')6- Crear una serie de valores estadísticos por país para todos los períodos
df_gapminder_csv%>%
group_by(country)%>%
reframe(poblacion_prom= mean(pop),
gdpPercap_sum= sum(gdpPercap),
gdp_prom= mean(gdpPercap),
gdp_max= max(gdpPercap),
gdp_min= min(gdpPercap))#%>%# A tibble: 142 × 6
country poblacion_prom gdpPercap_sum gdp_prom gdp_max gdp_min
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Afghanistan 15823715. 9632. 803. 978. 635.
2 Albania 2580249. 39064. 3255. 5937. 1601.
3 Algeria 19875406. 53112. 4426. 6223. 2449.
4 Angola 7309390. 43285. 3607. 5523. 2277.
5 Argentina 28602240. 107467. 8956. 12779. 5911.
6 Australia 14649312. 239767. 19981. 34435. 10040.
7 Austria 7583298. 244943. 20412. 36126. 6137.
8 Bahrain 373913. 216932. 18078. 29796. 9867.
9 Bangladesh 90755395. 9811. 818. 1391. 630.
10 Belgium 9725119. 238809. 19901. 33693. 8343.
# ℹ 132 more rows
# filter(country=='Venezuela')7- Encadenamiento para clasificar por continente a los países según su PIB
7.a- crear columna pib_mm
df_gapminder_csv%>%
filter(year==2007)%>%
mutate(pib_mm=(gdpPercap*pop)/1000000) # cifras en mm# A tibble: 142 × 7
country continent year lifeExp pop gdpPercap pib_mm
<chr> <chr> <int> <dbl> <int> <dbl> <dbl>
1 Afghanistan Asia 2007 43.8 31889923 975. 31079.
2 Albania Europe 2007 76.4 3600523 5937. 21376.
3 Algeria Africa 2007 72.3 33333216 6223. 207445.
4 Angola Africa 2007 42.7 12420476 4797. 59584.
5 Argentina Americas 2007 75.3 40301927 12779. 515034.
6 Australia Oceania 2007 81.2 20434176 34435. 703658.
7 Austria Europe 2007 79.8 8199783 36126. 296229.
8 Bahrain Asia 2007 75.6 708573 29796. 21113.
9 Bangladesh Asia 2007 64.1 150448339 1391. 209312.
10 Belgium Europe 2007 79.4 10392226 33693. 350141.
# ℹ 132 more rows
7.b- cuantiles según agrupamiento por continente
df_gapminder_csv%>%
filter(year==2007)%>%
mutate(pib_mm=(gdpPercap*pop)/1000000)%>%
group_by(continent)%>%
reframe(cuantil_1=quantile(pib_mm ,p=0.25),
cuantil_3=quantile(pib_mm, p=0.75),
country,
pib_mm)# A tibble: 142 × 5
continent cuantil_1 cuantil_3 country pib_mm
<chr> <dbl> <dbl> <chr> <dbl>
1 Africa 5662. 32146. Algeria 207445.
2 Africa 5662. 32146. Angola 59584.
3 Africa 5662. 32146. Benin 11643.
4 Africa 5662. 32146. Botswana 20604.
5 Africa 5662. 32146. Burkina Faso 17435.
6 Africa 5662. 32146. Burundi 3609.
7 Africa 5662. 32146. Cameroon 36138.
8 Africa 5662. 32146. Central African Republic 3085.
9 Africa 5662. 32146. Chad 17448.
10 Africa 5662. 32146. Comoros 701.
# ℹ 132 more rows
7.c- crear columna para asignación de categorías con función case_when
df_gapminder_csv%>%
filter(year==2007)%>%
mutate(pib_mm=(gdpPercap*pop)/1000000)%>%
group_by(continent)%>%
reframe(cuantil_1=quantile(pib_mm,p=0.25),
cuantil_3=quantile(pib_mm,p=0.75),
country,
pib_mm)%>%
mutate(pib_clasificacion=case_when(pib_mm < cuantil_1~'bajo',
pib_mm>= cuantil_1 & pib_mm <= cuantil_3 ~ 'medio',
pib_mm> cuantil_3 ~ 'alto'))# A tibble: 142 × 6
continent cuantil_1 cuantil_3 country pib_mm pib_clasificacion
<chr> <dbl> <dbl> <chr> <dbl> <chr>
1 Africa 5662. 32146. Algeria 2.07e5 alto
2 Africa 5662. 32146. Angola 5.96e4 alto
3 Africa 5662. 32146. Benin 1.16e4 medio
4 Africa 5662. 32146. Botswana 2.06e4 medio
5 Africa 5662. 32146. Burkina Faso 1.74e4 medio
6 Africa 5662. 32146. Burundi 3.61e3 bajo
7 Africa 5662. 32146. Cameroon 3.61e4 alto
8 Africa 5662. 32146. Central African Repub… 3.08e3 bajo
9 Africa 5662. 32146. Chad 1.74e4 medio
10 Africa 5662. 32146. Comoros 7.01e2 bajo
# ℹ 132 more rows
7.d- asignar a un nuevo objeto
df_gap_clasi_pibcontinent <- df_gapminder_csv%>%
filter(year==2007)%>%
mutate(pib_mm=(gdpPercap*pop)/1000000)%>%
group_by(continent)%>%
reframe(cuantil_1=quantile(pib_mm,p=0.25),
cuantil_3=quantile(pib_mm,p=0.75),
country,
pib_mm)%>%
mutate(pib_clasificacion=case_when(pib_mm < cuantil_1~'bajo',
pib_mm>= cuantil_1 & pib_mm <= cuantil_3 ~ 'medio',
pib_mm> cuantil_3 ~ 'alto'))%>%
select(-cuantil_1, -cuantil_3)7.e- subsetting países de América reordenados por criterio de pib_mm
df_gap_clasi_pibcontinent_ame <- df_gap_clasi_pibcontinent%>%
filter(continent=='Americas')%>%
arrange(desc(pib_mm))Visualizar los datos
ggplot(data=df_gap_clasi_pibcontinent_ame)+
geom_col(mapping = aes(x=country,
y= pib_mm,
fill = pib_clasificacion))7.f- crear factor para dato categórico y resolver orden de visualización de las columnas
df_gap_clasi_pibcontinent_ame <- df_gap_clasi_pibcontinent%>%
filter(continent=='Americas')%>%
arrange(desc(pib_mm))%>%
mutate(country = factor(country, levels = country))Visualizar Datos con columna de países como factor
ggplot(data=df_gap_clasi_pibcontinent_ame)+
geom_col(mapping = aes(x=country,
y= pib_mm,
fill = pib_clasificacion))8. Salidas distintas en group_by según más de un criterio
8.1 según criterio country & continent
df_gapminder_csv%>%
group_by( country, continent)%>%
reframe(gdpPercap_promedio= mean(gdpPercap))# A tibble: 142 × 3
country continent gdpPercap_promedio
<chr> <chr> <dbl>
1 Afghanistan Asia 803.
2 Albania Europe 3255.
3 Algeria Africa 4426.
4 Angola Africa 3607.
5 Argentina Americas 8956.
6 Australia Oceania 19981.
7 Austria Europe 20412.
8 Bahrain Asia 18078.
9 Bangladesh Asia 818.
10 Belgium Europe 19901.
# ℹ 132 more rows
8.2 según criterio continent & country
df_gapminder_csv%>%
group_by(continent, country)%>%
reframe(gdpPercap_promedio= mean(gdpPercap))# A tibble: 142 × 3
continent country gdpPercap_promedio
<chr> <chr> <dbl>
1 Africa Algeria 4426.
2 Africa Angola 3607.
3 Africa Benin 1155.
4 Africa Botswana 5032.
5 Africa Burkina Faso 844.
6 Africa Burundi 472.
7 Africa Cameroon 1775.
8 Africa Central African Republic 959.
9 Africa Chad 1165.
10 Africa Comoros 1314.
# ℹ 132 more rows